﻿// -------------------------------------------------------------------------
//    @FileName         :    NFGMPart.h
//    @Author           :    gaoyi
//    @Date             :    24-8-29
//    @Email            :    445267987@qq.com
//    @Module           :    NFGMPart
//
// -------------------------------------------------------------------------

#pragma once

#include <NFLogicCommon/NFLogicShmTypeDefines.h>
#include "NFPart.h"

class NFGMPart : public NF_OBJECT_TEMPLATE_MACRO(NFGMPart, EOT_LOGIC_PART_MIN_ID+PART_GM, NFPart)
public:
    NFGMPart();
    
    ~NFGMPart() override;
    
    int CreateInit();
    int ResumeInit();
public:
    public:
    //******************part调用接口******************
    /**
     * @brief 初始化part
     * @param pMaster
     * @param partType
     * @param dbData
     * @param bCreatePlayer
     * @return
     */
    int Init(NFPlayer* pMaster, uint32_t partType, const proto_ff::tbRoleDetail* pDBData);

    /**
     * @brief 释放part资源
     * @return
     */
    int UnInit() override;

    /**
     * @brief 所有部件初始化完成
     * @return
     */
    int OnInit() override { return 0; }
public:
    /**
     * @brief 从数据库中加载数据
     * @param data
     * @return
     */
    int LoadFromDB(const proto_ff::tbRoleDetail* pDBData) override { return 0; }

    /**
     * @brief 从配置中初始化数据
     * @return
     */
    int InitConfig(proto_ff::tbRoleDetail *pDbData, const RoleOne &stRoleOne) override { return 0; }

    /**
     * @brief 存储DB部件入口
     * @param proto
     * @return
     */
    int SaveDB(proto_ff::tbRoleDetail* pDBData) override { return 0; }

    /**
     * @brief 登陆入口
     * @return
     */
    int OnLogin() override { return 0; }

    /**
     * @brief 登出入口
     * @return
     */
    int OnLogout() override { return 0; }

    /**
     * @brief 掉线入口
     * @return
     */
    int OnDisconnect() override { return 0; }

    /**
     * @brief 重连入口
     * @return
     */
    int OnReconnect() override { return 0; }

    ////////////////////////////////// 每日零点 每周一零点 刷新接口 ///////////////////////////////////
    /**
     * @brief 每日零点 刷新接口
     * @return
     */
    int DayTick() override { return 0; }

    /**
     * @brief 每日零点 刷新接口
     * @return
     */
    int WeekTick() override { return 0; }

    /**
     * @brief 每月刷新接口
     * @return
     */
    int MonthTick() override { return 0; };

public:
    /**
     * @brief update
     */
    int LogicTick() override { return 0; }

public:
    /**
     * @brief 注册要处理的消息
     * @return
     */
    int RegisterMessage();

public:
    /**
     * @brief 处理客户端消�?
     * @param unLinkId
     * @param packet
     * @return
     */
    int OnHandleClientMessage(uint32_t msgId, NFDataPackage& packet);

    /**
     * @brief 处理来自服务器的信息
     * @param unLinkId
     * @param packet
     * @return
     */
    int OnHandleServerMessage(uint32_t msgId, NFDataPackage& packet);

public:
    /**
     * @brief
     * @param nMsgID
     * @param createCo
     * @return
     */
    virtual int RegisterClientMessage(uint32_t nMsgID, bool createCo = false);

    /**
     * @brief
     * @param nMsgID
     * @param createCo
     * @return
     */
    virtual int RegisterServerMessage(uint32_t nMsgID, bool createCo = false);
};